<?php
namespace app\index\controller;

use app\BaseController;
use think\facade\Request;
use think\facade\Route;
use think\facade\View;


class receive extends BaseController{
    public function test(\think\Request $request)
    {
        // 接收请求
        echo 1;
        // 通过请求对象来获取请求信息
        // 使用请求类得到请求对象 think\Request
        // 1.获取请求对象方式 静态获取
        // think\facade\Request 静态方法
        dump(Request::method());

        // 2.动态获取请求对象 参数绑定方式 在参数处携带\think\Request $request
        dump($request->method());

        // 3.继承父类（BaseController）的request属性（就是请求对象）
        dump($this->request->method());

        // 请求信息 Request对象支持获取当前的请求信息
        dump($this->request->ip());     // 获取ip地址
        dump($this->request->host());   // 获取当前访问域名或者IP
        dump($this->request->scheme());  // 获取当前访问协议
        dump($this->request->port());   // 获取当前访问的端口
        dump($this->request->url());    // 获取当前完整url
        dump($this->request->root());    // 获取URL访问根地址


    }

    // 一般控制器需要利用基础控制器类里面的get和post等方法来获得浏览器发送请求的参数
    public function get_test()
    {
        // 输入变量（接值）
        // get方法来接收“get”方式传参
        // xxx.com/xxxx/qqqq/www?a=1
        dump($this->request->get());
        // pathinfo方式(tp默认的一种路由方式)
        // pathinfo传参
        // xxx.com/xxxx/gggg/wwww/参数名/参数值/参数名2/参数值2...
        dump($this->request->route());
        // 通用的接值方式(接所有值【get,post,put,pathinfo】)
        dump($this->request->param());
    }

    public function post_test()
    {
        // 既有get请求（展示表单），又有接收post请求（接收表单提交数据）
        dump($this->request->isPost());
        if($this->request->isPost()){   //  处理数据
            $post = $this->request->param();    // 接收全部的参数
            dump($post);

            $post = $this->request->param('name');    // 接收单个参数
            dump($post);

            $post = $this->request->param('age','18');  // 如果接收不到参数则返回默认值
            dump($post);

            $post = $this->request->param('age/d','18');  // 可以将结果进行强制类型转换， /d 整形 /s 字符串
            dump($post);

            echo $this->request->param('name', '', 'htmlspecialchars'); // 设置过滤规则（可设置多个）
            dump($post);

        }else{  //get请求展示数据
            return View::fetch();
        }
        return View::fetch();
    }
    public function url()
    {
        // 使用think\Route类中的buildUrl方法生成url
        echo Route::buildUrl(); // 不传参构建当前该方法对应的路径
        echo '<br>';
        // 直接写方法名: 会构建当前控制器下其他方法的地址
        echo Route::buildUrl('receive');
        echo '<br>';
        // 构建其他控制器下方法的地址
        echo Route::buildUrl('Lzc/rander_foreach');
        echo '<br>';
        // 构建其他应用的地址: 应用名/控制器名/方法名
        echo Route::buildUrl('noob/index/showMyName');
        echo '<br>';
        // 构建携带参数的地址
        echo Route::buildUrl('noob/index/showMyName', array('name'=>'666'));
        echo '<br>';
        echo '<hr>';
        // 域名生成 默认生成URL地址是不带域名的，如果你采用了多域名部署或者希望生成带有域名的URL地址的话
        // 就需要传入第四个参数

        echo Route::buildUrl('index/Lzc/add', array('name'=>'666'))
            ->suffix('shtml')     // 构造视图后缀
            ->domain(true);     // 此参数用于修改域名,如果为true，显示完整路径(带域名)

    }
    public function url2()
    {
        $arr = array('name'=>'我是lzc');
        $url2_to_url3 = Route::buildUrl('index/receive/url3',$arr)  // 构建携带参数的url3视图地址，参数为$arr
            ->suffix('')
            ->domain(true);
        dump($arr);
        View::assign('url3_url', $url2_to_url3);    // 传值名为url3_url的值到视图渲染模板上，值为变量$url2_to_url3
        return View::fetch();   // 渲染视图
    }

    public function url3()
    {
        $post_param = $this->request->param('name');
        dump($post_param);
        View::assign('name', $post_param);    // 把post请求参数传入视图
        return View::fetch();   // 渲染视图
    }

    public function url_helper()
    {
    //  使用url助手函数构造url 不用控制器给html分配,直接写到html里
//        $urlHelper_to_url3 = url('url3', array('name'=>'我叫lzc')); // 构造携带参数的url3视图地址
//        echo $urlHelper_to_url3;
        return View::fetch();
    }
}
